#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<errno.h>
#include<unistd.h>

#define LOG "log.txt"

int main()
{

  //文件描述符相关内容
  //连续打开多个文件，检查文件描述符是否会变化
  fclose(stdin);//相当于close(0)关闭0号文件描述符，因此系统不在使用，后续的文件就可以使用
  //如果执行close(1)，则标准输出关闭，此后的新文件将会填入文件描述表的1位置，即log.txt。此时再用printf调用stdout向1号位置拷贝，并不能向显示器显示。这种操作就叫做重定向
  printf("连续打开多个文件，文件描述符是否变化\n");

  int fd1=open(LOG,O_WRONLY|O_CREAT|O_TRUNC,0666);
  int fd2=open(LOG,O_WRONLY|O_CREAT|O_TRUNC,0666);
  int fd3=open(LOG,O_WRONLY|O_CREAT|O_TRUNC,0666);
  int fd4=open(LOG,O_WRONLY|O_CREAT|O_TRUNC,0666);
  int fd5=open(LOG,O_WRONLY|O_CREAT|O_TRUNC,0666);
  int fd6=open(LOG,O_WRONLY|O_CREAT|O_TRUNC,0666);

  printf("%d\n",fd1);
  printf("%d\n",fd2);
  printf("%d\n",fd3);
  printf("%d\n",fd4);
  printf("%d\n",fd5);
  printf("%d\n",fd6);
  

  //标准输入输出对应的文件描述符
  //用于验证C语言中的FILE结构体中封装了文件描述符fd 
  printf("验证标准输入输出错误的文件描述符为0、1、2。且进程操作的文件，文件描述符顺延");
  printf("%d\n",stdin->_fileno);
  printf("%d\n",stdout->_fileno);
  printf("%d\n",stderr->_fileno);
  FILE* fp=fopen(LOG,"w");
  printf("%d\n",fp->_fileno);



  return 0;
}



